/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package diepafi;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.swing.JOptionPane;
import javax.swing.JList;
import model.Artist;
import model.MusicGroup;
import programm.DBmanager;

/**
 *
 * @author Παναγιώτης
 */
public class CreateGroupGUI extends javax.swing.JFrame {
    
    int oldId; //μεταβλητή για το "κράτημα" κωδικού προς επεξεργασία γκρουπ
    MusicGroup editGroup = new MusicGroup(); //θα "κρατάει" το γκρουπ σε περίπτωση επεξεργασίας
    private static EntityManager em;    //o entity manager
    GroupGUI gg=new GroupGUI(); //κρατάει το γονικό παράθυρο

    /**
     * Creates new form CreateGroupGUI
     */
    public CreateGroupGUI() {
        DBmanager dbm = new DBmanager(); 
        CreateGroupGUI.em=dbm.getEm();
        
        initComponents();
    }
    
    //κατασκευαστής με παράμετρο για να "θυμάται" το γονικό παράθυρο
    public CreateGroupGUI(GroupGUI gg) {
        DBmanager dbm = new DBmanager(); 
        CreateGroupGUI.em=dbm.getEm();
        
        this.gg=gg;
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jPanel2 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jTextFieldGroupName = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        jTextFieldDay = new javax.swing.JTextField();
        jTextFieldMonth = new javax.swing.JTextField();
        jTextFieldYear = new javax.swing.JTextField();
        jLabel6 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jListArtist = new javax.swing.JList();
        jButtonAdd = new javax.swing.JButton();
        jButtonDelete = new javax.swing.JButton();
        jButtonSave = new javax.swing.JButton();
        jButtonCancel = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Διαχείριση συγκροτήματος");
        setResizable(false);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                formWindowClosing(evt);
            }
        });

        jPanel1.setBackground(new java.awt.Color(0, 0, 0));

        jPanel2.setBackground(new java.awt.Color(102, 102, 102));
        jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(240, 240, 240));
        jLabel1.setText("Όνομα:");

        jTextFieldGroupName.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        jTextFieldGroupName.setNextFocusableComponent(jTextFieldDay);

        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel2.setForeground(new java.awt.Color(240, 240, 240));
        jLabel2.setText("Ημ. δημιουργίας:");

        jTextFieldDay.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        jTextFieldDay.setText("HH");
        jTextFieldDay.setNextFocusableComponent(jTextFieldMonth);
        jTextFieldDay.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTextFieldDayFocusGained(evt);
            }
        });

        jTextFieldMonth.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        jTextFieldMonth.setText("MM");
        jTextFieldMonth.setNextFocusableComponent(jTextFieldYear);
        jTextFieldMonth.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTextFieldMonthFocusGained(evt);
            }
        });

        jTextFieldYear.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        jTextFieldYear.setText("EEEE");
        jTextFieldYear.setNextFocusableComponent(jButtonAdd);
        jTextFieldYear.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTextFieldYearFocusGained(evt);
            }
        });

        jLabel6.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel6.setForeground(new java.awt.Color(240, 240, 240));
        jLabel6.setText("Καλλιτέχνες");

        jScrollPane1.setViewportView(jListArtist);

        jButtonAdd.setBackground(new java.awt.Color(102, 102, 102));
        jButtonAdd.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jButtonAdd.setText("Εισαγωγή");
        jButtonAdd.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButtonAdd.setNextFocusableComponent(jButtonDelete);
        jButtonAdd.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonAddActionPerformed(evt);
            }
        });

        jButtonDelete.setBackground(new java.awt.Color(102, 102, 102));
        jButtonDelete.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jButtonDelete.setText("Διαγραφή");
        jButtonDelete.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButtonDelete.setNextFocusableComponent(jButtonSave);
        jButtonDelete.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonDeleteActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addGap(18, 18, 18)
                        .addComponent(jTextFieldGroupName))
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanel2Layout.createSequentialGroup()
                                .addComponent(jLabel2)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(jTextFieldDay, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(jTextFieldMonth, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(jTextFieldYear, javax.swing.GroupLayout.PREFERRED_SIZE, 59, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(jPanel2Layout.createSequentialGroup()
                                .addComponent(jLabel6)
                                .addGap(18, 18, 18)
                                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addGap(26, 26, 26)
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jButtonDelete)
                            .addComponent(jButtonAdd))
                        .addGap(0, 49, Short.MAX_VALUE)))
                .addContainerGap())
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jTextFieldGroupName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jTextFieldDay, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTextFieldMonth, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTextFieldYear, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(42, 42, 42)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel6)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addComponent(jButtonAdd)
                        .addGap(18, 18, 18)
                        .addComponent(jButtonDelete)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jButtonSave.setBackground(new java.awt.Color(0, 0, 0));
        jButtonSave.setForeground(new java.awt.Color(240, 240, 240));
        jButtonSave.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/floppyNeg.png"))); // NOI18N
        jButtonSave.setText("Αποθήκευση");
        jButtonSave.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButtonSave.setNextFocusableComponent(jButtonCancel);
        jButtonSave.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonSaveActionPerformed(evt);
            }
        });

        jButtonCancel.setBackground(new java.awt.Color(0, 0, 0));
        jButtonCancel.setForeground(new java.awt.Color(240, 240, 240));
        jButtonCancel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/cancel.gif"))); // NOI18N
        jButtonCancel.setText("Άκυρο");
        jButtonCancel.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButtonCancel.setNextFocusableComponent(jTextFieldGroupName);
        jButtonCancel.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonCancelActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(jButtonSave)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 346, Short.MAX_VALUE)
                        .addComponent(jButtonCancel)))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButtonSave)
                    .addComponent(jButtonCancel))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(0, 0, 0))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jButtonCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCancelActionPerformed
        //ενεργοποίηση του προηγούμενου παραθύρου και καταστροφή του παρόντος
        gg.setEnabled(true);
        this.dispose();
    }//GEN-LAST:event_jButtonCancelActionPerformed

    private void jButtonSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonSaveActionPerformed
        //τροποποίηση του πίνακα με τα νέα δεδομένα
        //δημιουργία ενός γκρουπ με τιμές των πεδίων του τα περιεχόμενα της φόρμας
        MusicGroup newGroup = new MusicGroup();
        String groupName = jTextFieldGroupName.getText();
        
        //έλεγχος της εισαχθήσας ημερομηνίας και αρχικοποίηση τιμών σε περίπτωση λάθους
        int day, month, year;
        try {
            day = Integer.parseInt(jTextFieldDay.getText());
            if (day>31 || day<1) day=1;
            month = Integer.parseInt(jTextFieldMonth.getText())-1;
            if (month>11 || month<0) month=1;
            year = Integer.parseInt(jTextFieldYear.getText());
            if (year>2015 || year<1500) year=1985; //αν έχει δοθεί υπερβολικά μεγάλο ή μικρό έτος, αυτό αρχικοποιείται σε μια τιμή
        } catch (Exception ie) {
            JOptionPane.showMessageDialog(this , "Λάθος ημερομηνία!", "Ημερομηνία Δημιουργίας", JOptionPane.ERROR_MESSAGE);
            return;           
        }
            
        Date formated = new Timestamp(year-1900, month, day, 0,0,0,0);
        
        //έλεγχος εγκυρότητας δεδομένων
        if(groupName.length() > 100 ||groupName.length() < 1){
            JOptionPane.showMessageDialog(this , "Όχι κενό και μέχρι 100 χαρακτήρες!", "Όνομα", JOptionPane.ERROR_MESSAGE);
            return;
        }
        List<Artist> artists=new ArrayList();
        Artist addArtist = new Artist();
        
        //κάθε συγκρότημα πρέπει να έχει τουλάχιστον 2 καλλιτέχνες
        int listSize=jListArtist.getModel().getSize();
            if(listSize < 2){
                JOptionPane.showMessageDialog(this , "Τουλάχιστον δύο καλλιτένχες σε κάθε συγκρότημα", "Καλλιτέχνες/Συγκροτήματα", JOptionPane.ERROR_MESSAGE);
                return;
            }
        
        //Σε κάθε λίστα υπάρχει το Όνομα, το Επώνυμο και το Καλλιτεχνικό όνομα των καλλιτεχνών
        //"σπάμε" το String στα 3 (ξεχωρίζουμε τα πάρα πάνω πεδία) και τα χρησιμοποιούμε για να αναζητήσουμε τις εγγραφές στη βάση δεδομένων
        for (int i=0; i<listSize;i++) {
            try {
                String[] tokens=jListArtist.getModel().getElementAt(i).toString().split(", ");
                Query q1=em.createQuery("SELECT ar FROM Artist ar WHERE ar.artisticName=\""+tokens[2]+"\" AND ar.lastName=\""+tokens[1]+"\" AND ar.firstName=\""+tokens[0]+"\"", Artist.class);
                addArtist=(Artist) q1.getResultList().get(0); 
                artists.add(addArtist);
            } catch(ArrayIndexOutOfBoundsException a) {
                JOptionPane.showMessageDialog(this , "Υπάρχουν καλλιτέχνες που δεν υπάρχουν πια στη βάση δεδομένων", "Καλλιτέχνες/Συγκροτήματα", JOptionPane.ERROR_MESSAGE);
                return;            
            }    
        }

        
        //κρατάμε όλους τους καλλιτέχνες
        Query q2=em.createQuery("SELECT ar FROM Artist ar", Artist.class);
        List<Artist> allArtists=new ArrayList();
        allArtists= q2.getResultList();
        
        //ενημερώνουμε τα πεδία του newGroup
        newGroup.setGroupName(groupName);
        newGroup.setFormationDate(formated);
        
        //αν ο τίτλος του παραθύρου είναι "Δημιουργία" αποθηκεύουμε το νέο γκρουπ στη βάση
        switch (this.getTitle()) {
            case "Δημιουργία":
                try {
                    em.getTransaction().begin();
                    em.persist(newGroup);
                    em.getTransaction().commit();
                    gg.addToList(newGroup); //περνάμε το γκρουπ στην γονική φόρμα για να το εμφανίσουμε στον πίνακα
                } catch (Exception e) {
                    e.printStackTrace();
                    em.getTransaction().rollback();
                }
                //η σχέση n-m Καλλιτεχνών-Γκρουπ δυσκολεύει την αποθήκευσή τους
                //Αυτό το καταφέραμε με την παρακάτω υλοποίηση
                //σε ένα διπλό for αναζητούμε για τέροιασμα καλλιτέχνη του γκρουπ με εγγραφή στη βάση
                //αν βρεθεί τοποθετούμε τόσο το γκρουπ στη συλλογή του καλλιτέχνη
                //όσο και τον καλλιτέχνη στη συλλογή του γκρουπ
                Query q3=em.createQuery("SELECT m FROM MusicGroup m WHERE m.groupId=(SELECT MAX(mg.groupId) FROM MusicGroup mg)", MusicGroup.class);
                MusicGroup lastGroup=(MusicGroup) q3.getSingleResult();
                MusicGroup setArtistGroup=em.find(MusicGroup.class, lastGroup.getGroupId());
                em.getTransaction().begin();
                for(Artist a: allArtists) {
                    boolean flag=false;
                    for(Artist mgArtist: artists)
                        if(a.getArtistId()==mgArtist.getArtistId()) flag=true;
                    if(flag) {
                        Artist art =em.find(Artist.class, a.getArtistId());
                        art.getMusicGroupCollection().add(setArtistGroup);
                    }
                }
                setArtistGroup.setArtistCollection(artists);
                em.flush();
                em.clear();
                em.getTransaction().commit();
                
                //αλλιώς, αν είναι "Επεξεργασία" αναζητούμε την εγγραφή στον πίνακα και τροποποιούμε να πεδία της
                break;
            case "Επεξεργασία":
                MusicGroup editedGroup=em.find(MusicGroup.class, oldId); //στην oldId έχουμε αποθηκεύσει την id του επιλεγμένου γκρουπ
                em.getTransaction().begin();
                //επικαιροποίηση της λίστας καλλιτεχνών (στα γκρουπ) και μουσικών γκρουπ (στους καλλιτέχνες)
                for(Artist a: allArtists) {
                    boolean flag=false;
            for (Artist mgArtist : artists) {
                if(Objects.equals(a.getArtistId(), mgArtist.getArtistId())) flag=true;
            }
                    if(!flag) {
                        a.getMusicGroupCollection().remove(editedGroup);
                        Artist art =em.find(Artist.class, a.getArtistId());
                        art.setMusicGroupCollection(a.getMusicGroupCollection());
                    } else {
                        flag = false;
                        for (MusicGroup m : a.getMusicGroupCollection()) {
                            if(Objects.equals(m.getGroupId(), editedGroup.getGroupId())) flag=true;
                        }
                        if(!flag) {
                            a.getMusicGroupCollection().add(editedGroup);
                            Artist art =em.find(Artist.class, a.getArtistId());
                            art.setMusicGroupCollection(a.getMusicGroupCollection());
                        }
                        
                    }
                }
                editedGroup.setGroupName(groupName);
                editedGroup.setFormationDate(formated);
                editedGroup.setArtistCollection(artists);
                em.flush();
                em.clear();
                em.getTransaction().commit();
                gg.setListFields(editedGroup); //και περνάμε το ενημερωμένο γκρουπ στην γονική φόρμα για να εμφανίσουμε τις αλλαγές στον πίνακα
                break;
        }
        //ενεργοποιούμε το προηγούμενο παράθυρο και καταστρέφουμε το παρόν
        gg.setEnabled(true);
        this.dispose();


    }//GEN-LAST:event_jButtonSaveActionPerformed

    private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
       gg.setEnabled(true); //κλείνοντας ενεργοποιούμε το γονικό παράθυρο
    }//GEN-LAST:event_formWindowClosing

    private void jButtonDeleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonDeleteActionPerformed
        
        //αλλάζουμε τα περιεχόμενα της jList αφαιρώντας όσα είναι προς διαγραφή
        int listSize=jListArtist.getModel().getSize();
        List<String> listItems = new ArrayList();
        for(int i=0;i<listSize;i++){
           if(!(jListArtist.isSelectedIndex(i))) listItems.add(jListArtist.getModel().getElementAt(i).toString());
        }
       
        String[] sa=new String[listItems.size()];
        int index=0;
        for(String s: listItems) {
            sa[index]= s;
            index++;
        }
            
        
        jListArtist.setModel(new javax.swing.AbstractListModel() {
        
            String[] strings = sa; //...τοποθετούμε τους καλλιτέχνες ως items της jList
            @Override
            public int getSize() { return strings.length; }
            @Override
            public Object getElementAt(int i) { return strings[i]; }
        }); 
    }//GEN-LAST:event_jButtonDeleteActionPerformed

    private void jButtonAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAddActionPerformed
        SelectArtistForGroupForm frame=new SelectArtistForGroupForm(this, true, jListArtist);
        frame.setLocation((int) this.getLocation().getX(),(int) this.getLocation().getY());
        frame.setVisible(true);
        
        //αν από το παράθυρο εισαγωγής καλλιτεχνών "φύγαμε" με ok τότε στην jList προσθέτουμε τα επιλεγμένα
        //στοιχεία της λίστας του
        JList toAddList=new JList();
        if(frame.getReturnStatus()==1) {    
        toAddList.setModel(frame.getJList().getModel());
        int newNumOfItems=(toAddList.getModel().getSize())+(jListArtist.getModel().getSize());
        List<String> listItems = new ArrayList();
        for(int i=0;i<jListArtist.getModel().getSize();i++)
           listItems.add(jListArtist.getModel().getElementAt(i).toString());
        for(int i=0;i<toAddList.getModel().getSize();i++)
           listItems.add(toAddList.getModel().getElementAt(i).toString());    
            listItems.sort(null);
            String[] sa=new String[newNumOfItems];
            int index=0;
            for(String s: listItems) {
                sa[index]= s;
                index++;
            }
            
        jListArtist.setModel(new javax.swing.AbstractListModel() {
        
        String[] strings = sa; //...τοποθετούμε τους καλλιτέχνες ως items της jList
        @Override
        public int getSize() { return strings.length; }
        @Override
        public Object getElementAt(int i) { return strings[i]; }
        }); 
        }
        

    }//GEN-LAST:event_jButtonAddActionPerformed

    private void jTextFieldDayFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldDayFocusGained
        jTextFieldDay.selectAll();
    }//GEN-LAST:event_jTextFieldDayFocusGained

    private void jTextFieldMonthFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldMonthFocusGained
        jTextFieldMonth.selectAll();
    }//GEN-LAST:event_jTextFieldMonthFocusGained

    private void jTextFieldYearFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldYearFocusGained
        jTextFieldYear.selectAll();
    }//GEN-LAST:event_jTextFieldYearFocusGained

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(CreateGroupGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(CreateGroupGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(CreateGroupGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(CreateGroupGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(() -> {
            new CreateGroupGUI().setVisible(true);
        });
    }
    
    //μέθοδος για το "γέμισμα" των πεδίων της φόρμας με τα στοιχεία του επιλεγμένου γκρουπ
    public void setFields() {
        try{
          if(this.getTitle().equals("Επεξεργασία")) {
            jTextFieldGroupName.setText(editGroup.getGroupName());
            Date date =editGroup.getFormationDate();
            int day= date.getDate();
            int month=1+date.getMonth();
            int year=1900+date.getYear();
            jTextFieldDay.setText(Integer.toString(day));
            jTextFieldMonth.setText(Integer.toString(month));
            jTextFieldYear.setText(Integer.toString(year));
            oldId=editGroup.getGroupId();
            int numOfArtist = editGroup.getArtistCollection().size(); //το πλήθος των καλλιτεχνών του γκρουπ
            String[] sa=new String[numOfArtist]; //δημιουργούμε πίνακα string για να περάσουμε τους καλλιτέχνες του γκρουπ
            int i =0;
            for(Artist ar: editGroup.getArtistCollection()) {
                sa[i]=ar.getFirstName()+", "+ar.getLastName()+", "+ ar.getArtisticName(); //βάζουμε στον πίνακα τους καλλιτέχνες...
                i++;
            }
            
            jListArtist.setModel(new javax.swing.AbstractListModel() {
            String[] strings = sa; //...τοποθετούμε τους καλλιτέχνες ως items της jList
            @Override
            public int getSize() { return strings.length; }
            @Override
            public Object getElementAt(int i) { return strings[i]; }
            });
            
        }
        } catch (NullPointerException npe) {
            JOptionPane.showMessageDialog(this, "Πρόβλημα με την ανάκτηση στοιχείον του συγκροτήματος");
        }    
        
    }
    //ορίζει το προς επεξεργασία άλμπουμ
    public void setEditGroup(MusicGroup editGroup) {
        this.editGroup=editGroup;
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButtonAdd;
    private javax.swing.JButton jButtonCancel;
    private javax.swing.JButton jButtonDelete;
    private javax.swing.JButton jButtonSave;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JList jListArtist;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextField jTextFieldDay;
    private javax.swing.JTextField jTextFieldGroupName;
    private javax.swing.JTextField jTextFieldMonth;
    private javax.swing.JTextField jTextFieldYear;
    // End of variables declaration//GEN-END:variables
}
